package cn.tedu.string;

import java.util.*;

/**
 * 小Q想要给他的朋友发送一个神秘字符串，但是他发现字符串的过于长了，于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩，
 * 对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且1<=m<=100)，
 * 例如字符串ABCABCABC将会被压缩为[3|ABC]，现在小Q的同学收到了小Q发送过来的字符串，你能帮助他进行解压缩么？
 *
 * 输入描述:
 * 输入第一行包含一个字符串s，代表压缩后的字符串。
 * S的长度<=1000;
 * S仅包含大写字母、[、]、|;
 * 解压后的字符串长度不超过100000;
 * 压缩递归层数不超过10层;
 *
 * 输出描述:
 * 输出一个字符串，代表解压后的字符串。
 *
 * 输入例子1:
 * HG[3|B[2|CA]]F
 *
 * 输出例子1:
 * HGBCACABCACABCACAF
 *
 * 例子说明1:
 * HG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF
 */
public class Compress {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String text = sc.nextLine();

        if (text == null || text.length() == 0) {
            System.out.println("");
            return;
        }
        if (!text.contains("[")) {
            System.out.println(text);
            return;
        }

        Deque<Character> deque = new ArrayDeque<>();
        List<Character> buffer = new ArrayList<>();

        for (int i = 0; i < text.length(); i++) {
            Character c = text.charAt(i);
            if (c != ']')
                deque.push(c);
            else {
                buffer.clear();
                boolean isSplit = false;
                int number = 0;
                int bit = 0;
                while (deque.getFirst() != '[') {
                    Character now = deque.pop();
                    if (now == '|') {
                        isSplit = true;
                        continue;
                    }
                    if (isSplit) {
                        number += Integer.parseInt(now.toString()) * Math.pow(10, bit);
                        ++bit;
                    } else {
                        buffer.add(now);
                    }
                }
                deque.pop();
                for (int j = 0; j < number; j++) {
                    for (int i1 = buffer.size() - 1; i1 >= 0; i1--) {
                        deque.push(buffer.get(i1));
                    }
                }
            }
        }

        StringBuilder stringBuilder = new StringBuilder();
        deque.forEach(c -> {
            stringBuilder.append(c);
        });

        System.out.println(stringBuilder.reverse().toString());
    }
}
